package leetcode;

import javax.print.DocFlavor;
import java.util.HashMap;
import java.util.Map;

public class _13_RomanToInteger {
    class Solution{
        public int romanToInt(String s){
            Map dict = new HashMap();
            String roman = new String("IVXLCDM");
            int[] Integer = {1,5,10,50,100,500,1000};
            for (int i = 0;i < roman.length();i++){
                ((HashMap) dict).put(roman.charAt(i),Integer[i]);
            }
            int res = 0;
            for (int i = 0; i < s.length(); i++){
                switch (s.charAt(i)){
                    case 'I':
                        if (s.length() - i > 1 && s.charAt(i+1) == 'V'){
                            res -= Integer[roman.indexOf('I')];
                            res += Integer[roman.indexOf('V')];
                            i++;
                        }else if (s.length()-i > 1 && s.charAt(i+1) == 'X'){
                            res -= Integer[roman.indexOf('I')];
                            res += Integer[roman.indexOf('X')];
                            i++;
                            }else res += Integer[roman.indexOf('I')];

                        break;
                    case 'V':
                        res += Integer[roman.indexOf('V')];
                        break;
                    case 'X':
                        if (s.length()-i > 1 && s.charAt(i+1) == 'L'){
                            res -= Integer[roman.indexOf('X')];
                            res += Integer[roman.indexOf('L')];
                            i++;
                        }else if (s.length()-i > 1 && s.charAt(i+1) == 'C'){
                            res -= Integer[roman.indexOf('X')];
                            res += Integer[roman.indexOf('C')];
                            i++;
                        }else res += Integer[roman.indexOf('X')];
                        break;
                    case 'L':
                        res += Integer[roman.indexOf('L')];
                        break;
                    case 'C':
                        if (s.length()-i > 1 && s.charAt(i+1) == 'D'){
                            res -= Integer[roman.indexOf('C')];
                            res += Integer[roman.indexOf('D')];
                            i++;
                        }else if (s.length()-i > 1 && s.charAt(i+1) == 'M'){
                            res -= Integer[roman.indexOf('C')];
                            res += Integer[roman.indexOf('M')];
                            i++;
                        }else res += Integer[roman.indexOf('C')];
                        break;
                    case 'D':
                        res += Integer[roman.indexOf('D')];
                        break;
                    case 'M':
                        res += Integer[roman.indexOf('M')];
                        break;
                }
            }
            return res;
        }
    }

    public Solution getSolution(){return new Solution();}

    public static void main(String[] args){
        _13_RomanToInteger c = new _13_RomanToInteger();
        _13_RomanToInteger.Solution s = new _13_RomanToInteger().getSolution();
        int res = s.romanToInt("MCMXCIV");
        System.out.println(res);
    }
}
